This page has been superceded by a wiki version of this example: StatisticsExample



/*



File:      stat.d

Author:    Justin C. Calvarese

Website:   http://jcc_7.tripod.com/d/

License:   Public Domain



Linear regression statistics.



*/







double average(double[] r)

{

    double t = 0;



    for(int i=0; i < r.length; i++)

     t += r[i];



    return (t / (cast(double) r.length));

}





double beta1(double[] x, double[] y, double x_bar, double y_bar)

{

    int l;



    if (x.length != y.length) 

    {

        printf("x and y really should be the same length!");



        // Set length as the shorter series and move on...

        if(x.length < y.length) l = x.length;

        else l = y.length;

    }

    else l = x.length;





    double top_sum, btm_sum;



    top_sum = 0;

    for(int i = 0; i < l; i++)

     top_sum += (x[i] - x_bar) * (y[i] - y_bar);





    btm_sum = 0;

    for(int i = 0; i < l; i++)

     btm_sum += ((x[i] - x_bar) * (x[i] - x_bar));





    return top_sum / btm_sum;

}









double beta0(double x_bar, double y_bar, double b1)

{

    return y_bar - (b1 * x_bar);

}











int main()

{



    double[] x;



    x.length = 10;



    x[0] = 1;

    x[1] = 2;

    x[2] = 3;

    x[3] = 4;

    x[4] = 5;

    x[5] = 6.5;

    x[6] = 7;

    x[7] = 7.5;

    x[8] = 8;

    x[9] = 8.5 ;





    double[] y;



    y.length = 10;



    y[0] = 1;

    y[1] = 2;

    y[2] = 3;

    y[3] = 3.2;

    y[4] = 3.4;

    y[5] = 4;

    y[6] = 4.2;

    y[7] = 4.3;

    y[8] = 4.35;

    y[9] = 4.37;





    double x_bar, y_bar;



    x_bar = average(x);

    y_bar = average(y);





    double b1, b0;

    b1 = beta1(x, y, x_bar, y_bar);    

    b0 = beta0(x_bar, y_bar, b1);    



    printf("b1: %f\n", b1);

    printf("b0: %f\n", b0);





    return 0;

}